x86/mm: Allow dummy responses on the mem_event ring.
authorAndres Lagar-Cavilla <andres@lagarcavilla.org>
Tue, 6 Dec 2011 20:10:32 +0000 (20:10 +0000)
committerAndres Lagar-Cavilla <andres@lagarcavilla.org>
Tue, 6 Dec 2011 20:10:32 +0000 (20:10 +0000)
Ring semantics require that for every request, a response be put. This
allows consumer to place a dummy response if need be.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
xen/arch/x86/mm/mem_sharing.c
xen/arch/x86/mm/p2m.c
xen/include/public/mem_event.h

index 6c42a78bd2006a847d3dddf6714792a00c1a02cc..6251f6561c95a9e15ed20952eb1bca345462cf78 100644 (file)
@@ -303,6 +303,8 @@ int mem_sharing_sharing_resume(struct domain *d)
     /* Get all requests off the ring */
     while ( mem_event_get_response(&d->mem_event->share, &rsp) )
     {
+        if ( rsp.flags & MEM_EVENT_FLAG_DUMMY )
+            continue;
         /* Unpause domain/vcpu */
         if ( rsp.flags & MEM_EVENT_FLAG_VCPU_PAUSED )
             vcpu_unpause(d->vcpu[rsp.vcpu_id]);
index a5113ded606c40d4ced26a9b3950134b1055fbcb..7363282179634f2d86d6891c5aa8029606c842a0 100644 (file)
@@ -1056,6 +1056,8 @@ void p2m_mem_paging_resume(struct domain *d)
     /* Pull all responses off the ring */
     while( mem_event_get_response(&d->mem_event->paging, &rsp) )
     {
+        if ( rsp.flags & MEM_EVENT_FLAG_DUMMY )
+            continue;
         /* Fix p2m entry if the page was not dropped */
         if ( !(rsp.flags & MEM_EVENT_FLAG_DROP_PAGE) )
         {
@@ -1164,6 +1166,8 @@ void p2m_mem_access_resume(struct domain *d)
     /* Pull all responses off the ring */
     while( mem_event_get_response(&d->mem_event->access, &rsp) )
     {
+        if ( rsp.flags & MEM_EVENT_FLAG_DUMMY )
+            continue;
         /* Unpause domain */
         if ( rsp.flags & MEM_EVENT_FLAG_VCPU_PAUSED )
             vcpu_unpause(d->vcpu[rsp.vcpu_id]);
index 0b91a7634103a10048f67ea5e1b1feca520be4ee..770cc7cb9a8f9e72d1d76669c5edbc997a154293 100644 (file)
@@ -40,6 +40,7 @@
 #define MEM_EVENT_FLAG_DROP_PAGE    (1 << 1)
 #define MEM_EVENT_FLAG_EVICT_FAIL   (1 << 2)
 #define MEM_EVENT_FLAG_FOREIGN      (1 << 3)
+#define MEM_EVENT_FLAG_DUMMY        (1 << 4)
 
 /* Reasons for the memory event request */
 #define MEM_EVENT_REASON_UNKNOWN     0    /* typical reason */